/**
 * ajax请求
 * 不带 token
 */
import {
    Message
} from 'element-ui';
import axios from 'axios';
import apis from './api';


/**
 * 发起API网络请求方法
 * 
 * @param {Object} params 回调函数/配置参数
 * @param {Object} params.data 请求的参数
 * @param {string} params.method HTTP请求方法
 * @param {string} params.type post 数据格式  from:表单格式 json : json格式
 * @param {Function} params.success 接口调用成功的回调函数
 * @param {Function} params.fail 接口调用失败的回调函数
 * @param {Function} params.complete 接口调用结束的回调函数（调用成功、失败都会执行）
 */

function apiAxios(method, url, params) {
    if (params.type == "json") {
        axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
    } else {
        axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
    }
    axios({
            method: method,
            url: url,
            data: method == 'POST' || method == 'PUT' ? params.data : '',
            params: method == 'GET' || method == 'DELETE' ? params.data : '',
            baseURL: apis.ajaxUrl,
            timeout: 60000,
        }).then(function (res) {
            if (res.status !== 200) {
                Message('网络请求异常！');
            } else {
                params.success(res.data)
            }
        })
        .catch(function (error) {
            if (error.message == 'Network Error') {
                Message('请登录!');
                return setTimeout(() => {
                    location.href = '/login'
                }, 1000);
            }

            if (error.response) {
                if (error.response.status == "401") {
                    Message('尚未登录!');
                    return setTimeout(() => {
                        location.href = '/login'
                    }, 1000);
                }
            } else if (error.request) {
                console.log(error.request);
            } else {
                console.log('Error', error.message);
            }
            if (params.fail) {
                return params.fail(error.config);
            }
        })
}

// 返回在vue模板中的调用接口
export default {
    get: function (url, params) {
        return apiAxios('GET', url, params)
    },
    post: function (url, params) {
        return apiAxios('POST', url, params)
    },
    put: function (url, params) {
        return apiAxios('PUT', url, params)
    },
    delete: function (url, params) {
        return apiAxios('DELETE', url, params)
    },

}